package com.hwd.srb.core;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 黄伟东/Victor
 * @date 2022/3/10 17:05
 * @Description
 */
@SpringBootTest
public class CoreGenerator {

    @Test
    public void generateCore() {
        //1、创建代码生成器
        AutoGenerator autoGenerator = new AutoGenerator();

        //2、全局配置(比如项目编译目录，或者生成的类的前缀后缀等)
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor("黄伟东/Victor");
        gc.setOpen(true);//生成后是否打开资源管理器
        gc.setServiceName("%sService");//去掉Service接口的首字母I
        gc.setIdType(IdType.AUTO);//主键策略
        gc.setSwagger2(true);//开启Swagger2模式
        autoGenerator.setGlobalConfig(gc);

        //3、数据源
        DataSourceConfig ds = new DataSourceConfig();
        ds.setUrl("jdbc:p6spy:mysql://localhost:3306/srb_core?useUnicode=true&characterEncoding=utf8");
        ds.setDriverName("com.p6spy.engine.spy.P6SpyDriver");
        ds.setUsername("root");
        ds.setPassword("353215");
        ds.setDbType(DbType.MYSQL);

        autoGenerator.setDataSource(ds);

        //4、包配置(比如实体类的生成包等)
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.hwd.srb.core");
        pc.setEntity("pojo.com.hwd.srb.jwt.entity");
        autoGenerator.setPackageInfo(pc);

        //5、策略配置(比如逻辑删除是否加前缀，驼峰转大小写)
        StrategyConfig sc = new StrategyConfig();
        sc.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
        sc.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
        sc.setEntityLombokModel(true);
        sc.setLogicDeleteFieldName("is_deleted");//逻辑删除字段名
        sc.setEntityBooleanColumnRemoveIsPrefix(true);//去掉布尔值的is_前缀（确保tinyint(1)）
        sc.setRestControllerStyle(true);//restful api风格控制器
        autoGenerator.setStrategy(sc);

        //6、执行代码生成器
        autoGenerator.execute();

    }
}
